// 队列 Queue
// 1.队列是一个有序列表，可以用数组或是链表来实现
// 2.遵循 先进先出 的原则

// 数组实现
class ArrayQueue {
    constructor (arrMaxSize) {
        this.maxSize = arrMaxSize       // 数组的最大容量
        this.arr = Array(arrMaxSize)    // 模拟队列
        this.front = -1                 // 队列头
        this.rear = -1                  // 队列尾
    }

    // 判断队列是否已满
    isFull () {
        return this.rear === this.maxSize - 1
    }

    // 判断队列是否为空
    isEmpty () {
        return this.front === this.rear
    }

    // 添加数据到队列
    add (n) {
        if (this.isFull()) {
            console.log('队列满，不能继续添加')
            return
        }
        this.rear++
        this.arr[this.rear] = n
    }

    // 取数据
    get () {
        if (this.isEmpty()) {
            console.log('队列空，不能取数据')
            return
        }
        this.front++
        return this.arr[this.front]
    }

    show () {
        if (this.isEmpty()) {
            console.log('队列空')
            return
        }
        return this.arr.slice(this.front + 1, this.rear + 1)
    }

    // 显示头数据
    showFront () {
        if (this.isEmpty()) {
            console.log('队列空，没有数据')
            return
        }
        return this.arr[this.front + 1]
    }
}

function main () {
    let arrQueue = new ArrayQueue(3)
    arrQueue.add(1)
    arrQueue.add(2)
    arrQueue.add('d')
    console.log(arrQueue.show())
    console.log(arrQueue.showFront())
    arrQueue.get()
    console.log(arrQueue.show())
}

main()
